﻿#ifndef LPHEADERCONTROL_H
#define LPHEADERCONTROL_H

#include <QWidget>
#include <QToolButton>
#include <QGridLayout>

namespace Ui {
class LPHeaderControl;
}
/**
* @brief     菜单栏Item结构体，用于保存菜单栏信息
* @author    Wanglipeng
* @email     1594932770@qq.com
* @date      2021-11-11
*/
struct LPMenuPage
{
    LPMenuPage():_Layout(NULL),_PageWidget(NULL)
      ,_CurrentIndex(0),_Row(0)
      ,_Colnum(0),_Name("")
    {

    }
    int _Row;
    int _Colnum;
    int _CurrentIndex;
    QString _Name;
    QWidget * _PageWidget;
    QGridLayout * _Layout;
};

/**
* @brief     自定义标题栏
* @author    Wanglipeng
* @email     1594932770@qq.com
* @date      2021-11-09
*/
struct LPHeaderControlPrivate;
class LPHeaderControl : public QWidget
{
    Q_OBJECT

public:
    explicit LPHeaderControl(QWidget *parent = nullptr);
    virtual ~LPHeaderControl()override;

    /**************************************
    * @author    Wanglipeng
    * @date      2021-11-11
    * @说明      设置菜单栏名称
    ***************************************/
    void SetMenuName( const QString & Name );

    /**************************************
    * @author    Wanglipeng
    * @date      2021-11-11
    * @说明      设置应用名称
    ***************************************/
    void SetAppName( const QString & Name );

    /**************************************
    * @author    Wanglipeng
    * @date      2021-11-11
    * @说明      添加菜单组
    ***************************************/
    LPMenuPage * AddMenuGroup( const QString & Name );

    /**************************************
    * @author    Wanglipeng
    * @date      2021-11-11
    * @说明      删除菜单组
    ***************************************/
    bool DeleteMenuGroup( const QString & Name );

    /**************************************
    * @author    Wanglipeng
    * @date      2021-11-11
    * @说明      菜单中添加子项
    ***************************************/
    QToolButton * AddAction( LPMenuPage* Page, const int Row, const int Colnum, const QString ActionName );

private:

    /**************************************
    * @author    Wanglipeng
    * @date      2021-11-10
    * @说明       初始化界面风格
    ***************************************/
    void InitStyle();

    /**************************************
    * @author    Wanglipeng
    * @date      2021-11-19
    * @说明      初始化，用于当前时间更新
    ***************************************/
    void InitTimer();

    /**************************************
    * @author    Wanglipeng
    * @date      2021-11-10
    * @说明  窗口大小自适应父类
    ***************************************/
    void AdjustWidgetSize();

    /**************************************
    * @author    Wanglipeng
    * @date      2021-11-11
    * @说明      是否对应名称得菜单项
    ***************************************/
    LPMenuPage * FindMenuPage( const QString & PageName );

    /**************************************
    * @author    Wanglipeng
    * @date      2021-11-11
    * @说明      删除菜单页
    ***************************************/
    bool DeleteMenuPage( const QString PageName );

    /**************************************
    * @author    Wanglipeng
    * @date      2021-11-11
    * @说明      想菜单添加窗口
    ***************************************/
    void AddGroupWidget( LPMenuPage* Page, const int Row, const int Colnum, QWidget* Widget );

    /**************************************
    * @author    Wanglipeng
    * @date      2021-11-11
    * @说明      设置堆栈窗口页数
    ***************************************/
    void SetStackedWidgetPage( const int Index );

protected:
    bool eventFilter( QObject* Obj, QEvent * Event );
    void mousePressEvent( QMouseEvent * event )override;
    void mouseMoveEvent( QMouseEvent * event )override;
    void paintEvent( QPaintEvent * event )override;
    void resizeEvent( QResizeEvent* event )override;

private slots:
    /**************************************
    * @author    Wanglipeng
    * @date      2021-11-10
    * @说明      关闭按钮槽函数
    ***************************************/
    void on_pbt_close_clicked();
    /**************************************
    * @author    Wanglipeng
    * @date      2021-11-10
    * @说明      最小化槽函数
    ***************************************/
    void on_pbt_min_clicked();

    /**************************************
    * @author    Wanglipeng
    * @date      2021-11-11
    * @说明      上一页
    ***************************************/
    void on_pbt_Top_clicked();

    /**************************************
    * @author    Wanglipeng
    * @date      2021-11-11
    * @说明      下一页
    ***************************************/
    void on_pbt_Bottom_clicked();

    /**************************************
    * @author    Wanglipeng
    * @date      2021-11-19
    * @说明      定时器当前时间槽函数
    ***************************************/
    void on_Timer_slots();

signals:
    void heightChange();

private:
    Ui::LPHeaderControl *ui;

    LPHeaderControlPrivate * _p;
};

#endif // LPHEADERCONTROL_H
